package recordsound.example;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.os.Environment;

public class GrabadoraActivity extends Activity implements OnCheckedChangeListener, OnCompletionListener{

private static final String FICHERO = Environment.getExternalStorageDirectory() + "/test2.3gp";
private MediaRecorder grabadora;
private MediaPlayer reproductor;
private ToggleButton botonRec;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);

	botonRec = (ToggleButton) findViewById(R.id.rec);
	botonRec.setOnCheckedChangeListener(this);
}

@Override
public void onStart() {
	super.onStart();
	botonRec.setEnabled(true);
	botonRec.setChecked(false);
}

@Override
public void onStop() {
	botonRec.setEnabled(true);
	botonRec.setChecked(false);
	super.onStop();
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
	try {
		if (isChecked) {
			grabar();
		} else {
			pararGrabar();
			reproducir();
		}
	} catch (Exception e) {
		Toast.makeText(GrabadoraActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
		e.printStackTrace();
	}
}

protected void grabar() throws IllegalStateException, IOException {
	grabadora = new MediaRecorder();

	Log.d("grabadora", "grabando" + FICHERO);
	
	// Audio source
	grabadora.setAudioSource(MediaRecorder.AudioSource.MIC);
	// formato de salida
	grabadora.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
	grabadora.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
	
	grabadora.setOutputFile(FICHERO);
	
	grabadora.prepare();
	grabadora.start();
}

protected void pararGrabar() {
	Log.d("grabadora","parar");
	
	grabadora.stop();
	grabadora.release();
	grabadora = null;
}

protected void reproducir() throws IllegalArgumentException, IllegalStateException, IOException {
	Log.d("grabadora","reproduciendo");
	
	if (reproductor != null) {
		reproductor.release();
	}

	botonRec.setEnabled(false);
	
	reproductor = new MediaPlayer();
	reproductor.setDataSource(FICHERO);
	reproductor.prepare();
	reproductor.start();
	
	reproductor.setOnCompletionListener(this);
}

/**
 * Cuando se termine de reproducir 
 * volvemos a activar el boton y liberamos el reproductor
 */
@Override
public void onCompletion(MediaPlayer mp) {
	botonRec.setEnabled(true);
	
	reproductor.release();
}
}